import Utf8Encoder from '@/utils/utf8-encoder.js';
import baba from '@/utils/crypto-utils.js'; // 正确导入 CRC 函数
export default {
	// 新增字符串编码方法
	encodeString(str) {
		return Utf8Encoder.encode(str);
	},
	// 构建数据包
	buildPacket(type, strData, keyHex) {
		console.log('构建包', type, strData, keyHex);
		const data = this.encodeString(strData); // 使用自定义编码
		const ctrl = 0x03; // 0b11 (加密+CRC)
		const header = new Uint8Array([
			ctrl,
			type,
			(data.length >> 8) & 0xFF,
			data.length & 0xFF
		]);

		// 合并数据
		const payload = new Uint8Array([...header, ...data]);

		// 计算 CRC
		const crc = baba.crc16(payload);
		const crcBytes = new Uint8Array([(crc >> 8) & 0xFF, crc & 0xFF]);
		const fullData = new Uint8Array([...payload, ...crcBytes]);

		// 加密处理
		const encrypted = baba.aesEncrypt(fullData, keyHex);
		return new Uint8Array(encrypted);
	},

	// 分包处理（MTU=128）
	splitPackets(packet) {
		const packets = [];
		let seq = 0;
		for (let i = 0; i < packet.length; i += 123) { // 128-5(header)
			const chunk = packet.slice(i, i + 123);
			const packetData = new Uint8Array([seq++, ...chunk]);
			packets.push(packetData.buffer);
		}
		return packets;
	}
};